#define _CRT_SECURE_NO_WARNINGS
#include<vector>
#include<iostream>
#include<set>
using namespace std;

//int main()
//{
//	//vector<int> arr;
//	//for (int i = 1; i <= 10; i++)
//	//{
//	//	arr.push_back(i * i);
//	//}
//	//for (int i = 0; i < arr.size(); i++)
//	//{
//	//	cout << arr[i]<<' ';
//	//}
//
//	//vector<vector<int> > arr;
//	//for (int i = 0; i < 4; i++)
//	//{
//	//	vector<int> x(5, i + 1);
//	//	arr.push_back(x);
//	//}
//	vector<vector<int> >arr(4, vector<int>(5, 0));
//	cout << arr[0].size() << endl;
//	for (int i = 0; i < 4; i++)
//	{
//		for (int j = 0; j < 5; j++)
//			cout << arr[i][j] << ' ';
//		cout << endl;
//	}
//	return 0;
//}

//int main()
//{
//	vector<int> arr(6, 0);
//	arr = { 10,2,3,4,2,10 };
//	set<int> x;
//	for (int i = 0; i < arr.size(); i++)
//		x.insert(arr[i]);
//	for (set<int>::iterator it = x.begin(); it != x.end(); it++)
//		cout << *it << ' ';
//	return 0;
//}


struct Point
{
	int x;
	int y;
	bool operator<(const Point& a)const
	{
		if (x == a.x)
			return a.x > x;
		else
			return a.y > y;
	}
};

int main()
{
	Point s;
	set<Point> x;
	int n = 0; 
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> s.x >> s.y;
		x.insert(s);
	}
	for (set<Point>::iterator it = x.begin(); it != x.end(); it++)
	{
		cout << it->x << ' ' << it->y << endl;
	}
	return 0;
}